#!/usr/bin/env python
# -*- coding: UTF-8 -*-
'''
    利用感知器实现逻辑 or 的功能
'''
from perceptron import Perception
def activator(x):
    '''
    定义激励函数
    :param x: 输入
    :return: 输出
    '''
    return 1 if x > 0 else 0


def generate_train_dataset():
    '''
    基于逻辑 or 的真值表构建训练数据
    :return: 训练数据
    '''
    # 输入向量列表
    input_vecs = [[1,1],[0,0],[1,0],[0,1]]
    # 期望的输出列表labels，与输出需要一一对应
    labels = [1,1,1,0]
    return input_vecs,labels


def train_and_perceptron():
    '''
    使用 or 真值表训练感知器
    :return: 训练好的感知器
    '''
    # 创建感知器
    p = Perception(2, activator)
    # 训练，迭代10次，学习率为0.1
    input_vecs,labels = generate_train_dataset()
    p.train(input_vecs, labels, 10, 0.1)
    # 返回训练好的感知器
    return p


if __name__ == '__main__':
    # 训练 or 感知器
    or_perceptron = train_and_perceptron()
    # 但因训练获得权重
    print or_perceptron
    # 测试
    print '1 and 1 = %d' % or_perceptron.predict([1,1])
    print '0 and 0 = %d' % or_perceptron.predict([0,0])
    print '1 and 0 = %d' % or_perceptron.predict([1,0])
    print '0 and 1 = %d' % or_perceptron.predict([0,1])

